package dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import entity.Produto;

public class ProdutoDao extends GenericDao {

	public String formatarDataAtual() {
		Date data = new Date(System.currentTimeMillis());
		SimpleDateFormat formatarDate = new SimpleDateFormat("dd-MM-yyyy");
		String dataAtual = formatarDate.format(data);
		String dataA = dataAtual.replace('/', '-');
		String dataInv = "";
		dataInv = "" + dataA.substring(6, 10) + dataA.substring(2, 6)
				+ dataA.substring(0, 2);
		return dataInv;
	}

	public String formatarDataString(String data) {
		String dataA = data.replace('-', '/');
		String dataInv = "";
		dataInv = dataA.substring(8, 10) + "/" + dataA.substring(5, 7) + "/"
				+ dataA.substring(0, 4);
		return dataInv;
	}

	public String formatarDataInv(String data) {
		if (data.contains("-")) {
			String dataA = data.replace('-', '/');
			String dataInv = "";
			dataInv = dataA.substring(8, 10) + "/" + dataA.substring(5, 7)
					+ "/" + dataA.substring(0, 4);
			System.out.println("????????????????????" + dataInv);
			return dataInv;
		}
		return null;
	}

	public void salvar(Produto produto) {
		try {
			String insert = "INSERT INTO PRODUTO(data_cadastro, data_ultima_alteracao, cod_barra, "
					+ "DESCRICAO, marca, local_estoque, aliquota, cod_ncm, ativo, cod_loja, liberado_ne, "
					+ "complemento, preco_custo, preco_venda, margem, unidade, desconto_max, icms, ipi, "
					+ "qtd_estoque, estoque_min, estoque_max, fornecedor, iat, ippt, sit_trib) "
					+ "VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
			save(insert, produto.getDataCadastro(),
					produto.getDataUltimaAlteracao(), produto.getCod_barra(),
					produto.getDescricao(), produto.getMarca(),
					produto.getLocalEstoque(), produto.getAliquota(),
					produto.getCodNcm(), produto.getAtivo(),
					produto.getCodLoja(), produto.getLiberadoNe(),
					produto.getComplemento(), produto.getPrecoCusto(),
					produto.getPrecoVenda(), produto.getMargem(),
					produto.getUnidade(), produto.getDescontoMax(),
					produto.getIcms(), produto.getIpi(),
					produto.getQtdEstoque(), produto.getEstoqueMin(),
					produto.getEstoqueMax(), produto.getFornecedor(),
					produto.getIat(), produto.getIppt(),
					produto.getSituacaoTributaria());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void alterar(Produto produto) {
		try {
			String update = "UPDATE PRODUTO "
					+ "SET data_ultima_alteracao = ?, cod_barra = ? , DESCRICAO = ?, marca = ?, local_estoque = ?, aliquota = ?, "
					+ "cod_ncm = ?, ativo = ?, cod_loja = ?, liberado_ne = ?, complemento = ?, "
					+ "preco_custo = ?, preco_venda = ?, margem = ?, unidade = ?, desconto_max = ?, icms = ?"
					+ "ipi = ?, qtd_estoque = ?, estoque_min = ?, estoque_max = ?, fornecedor = ?, iat = ?"
					+ "ippt = ?, sit_trib = ?" + "WHERE cod_produto = ?";
			update(update, produto.getId(), produto.getDataUltimaAlteracao(),
					produto.getCod_barra(), produto.getDescricao(),
					produto.getMarca(), produto.getLocalEstoque(),
					produto.getAliquota(), produto.getCodNcm(),
					produto.getAtivo(), produto.getCodLoja(),
					produto.getLiberadoNe(), produto.getComplemento(),
					produto.getPrecoCusto(), produto.getPrecoVenda(),
					produto.getMargem(), produto.getUnidade(),
					produto.getDescontoMax(), produto.getIcms(),
					produto.getIpi(), produto.getQtdEstoque(),
					produto.getEstoqueMin(), produto.getEstoqueMax(),
					produto.getFornecedor(), produto.getIat(),
					produto.getIppt(), produto.getSituacaoTributaria());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void excluir(Object id) {
		try {
			String delete = "DELETE FROM PRODUTO WHERE cod_produto = ?";
			delete(delete, id);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public List<Produto> findProdutos() throws SQLException {
		List<Produto> produtos = new ArrayList<Produto>();

		String select = "SELECT * FROM PRODUTO";

		PreparedStatement stmt = getConnection().prepareStatement(select);

		ResultSet rs = stmt.executeQuery();

		while (rs.next()) {
			Produto produto = new Produto();
			produto.setId(rs.getInt("cod_produto"));
			produto.setDataCadastro(rs.getString("data_cadastro"));
			produto.setDataUltimaAlteracao(rs
					.getString("data_ultima_alteracao"));
			produto.setCod_barra(rs.getInt("cod_barra"));
			produto.setDescricao(rs.getString("descricao"));
			produto.setMarca(rs.getString("marca"));
			produto.setLocalEstoque(rs.getString("local_estoque"));
			produto.setAliquota(rs.getDouble("aliquota"));
			produto.setCodNcm(rs.getInt("cod_ncm"));
			produto.setAtivo(rs.getString("ativo"));
			produto.setCodLoja(rs.getInt("cod_loja"));
			produto.setLiberadoNe(rs.getString("liberado_ne"));
			produto.setComplemento(rs.getString("complemento"));
			produto.setPrecoCusto(rs.getDouble("preco_custo"));
			produto.setPrecoVenda(rs.getDouble("preco_venda"));
			produto.setMargem(rs.getDouble("margem"));
			produto.setUnidade(rs.getString("margem"));
			produto.setDescontoMax(rs.getDouble("desconto_max"));
			produto.setIcms(rs.getDouble("icms"));
			produto.setIpi(rs.getDouble("ipi"));
			produto.setQtdEstoque(rs.getInt("qtd_estoque"));
			produto.setEstoqueMin(rs.getInt("estoque_min"));
			produto.setEstoqueMax(rs.getInt("estoque_max"));
			produto.setFornecedor(rs.getString("fornecedor"));
			produto.setIat(rs.getString("iat"));
			produto.setIppt(rs.getString("ippt"));
			produto.setSituacaoTributaria(rs.getString("sit_trib"));
			produtos.add(produto);
		}

		rs.close();
		stmt.close();

		return produtos;
	}

	public long lastId() {
		try {
			String sql = "SELECT MAX(cod_produto) AS cod_produto FROM PRODUTO";
			PreparedStatement stmt = getConnection().prepareStatement(sql);
			ResultSet rs = stmt.executeQuery();
			rs.next();
			long id = rs.getLong("cod_produto") + 1;
			return id;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return 0;
	}

	// public Cliente findByName(String nome) throws SQLException {
	// String select = "SELECT * FROM CLIENTE WHERE nome = ?";
	// Cliente cliente = null;
	// PreparedStatement stmt = getConnection().prepareStatement(select);
	//
	// stmt.setString(1, nome);
	// ResultSet rs = stmt.executeQuery();
	//
	// while (rs.next()) {
	// cliente = new Cliente();
	// cliente.setId(rs.getLong("cod_cliente"));
	// cliente.setNome(rs.getString("nome"));
	// cliente.setDataCadastro(rs.getString("data_cadastro"));
	// cliente.setDataNascimento(rs.getString("data_nasc"));
	// cliente.setCpf(rs.getString("cpf"));
	// cliente.setRg(rs.getString("rg"));
	// cliente.setEndereco(rs.getString("endereco"));
	// cliente.setBairro(rs.getString("bairro"));
	// cliente.setCidade(rs.getString("cidade"));
	// cliente.setCep(rs.getString("cep"));
	// cliente.setTelefone(rs.getString("telefone"));
	// cliente.setCelular(rs.getString("celular"));
	// cliente.setSexo(rs.getString("sexo"));
	// cliente.setNaturalidade(rs.getString("naturalidade"));
	// cliente.setEstadoCivil(rs.getString("est_civil"));
	// cliente.setEstado(rs.getString("estado"));
	// }
	//
	// rs.close();
	// stmt.close();
	// return cliente;
	// }

	public Produto findById(int id) throws SQLException {
		String select = "SELECT * FROM PRODUTO WHERE cod_produto = ?";
		Produto produto = null;
		PreparedStatement stmt = getConnection().prepareStatement(select);

		stmt.setInt(1, id);
		ResultSet rs = stmt.executeQuery();

		while (rs.next()) {
			produto = new Produto();
			produto.setId(rs.getInt("cod_produto"));
			produto.setDataCadastro(rs.getString("data_cadastro"));
			produto.setDataUltimaAlteracao(rs
					.getString("data_ultima_alteracao"));
			produto.setCod_barra(rs.getInt("cod_barra"));
			produto.setDescricao(rs.getString("descricao"));
			produto.setMarca(rs.getString("marca"));
			produto.setLocalEstoque(rs.getString("local_estoque"));
			produto.setAliquota(rs.getDouble("aliquota"));
			produto.setCodNcm(rs.getInt("cod_ncm"));
			produto.setAtivo(rs.getString("ativo"));
			produto.setCodLoja(rs.getInt("cod_loja"));
			produto.setLiberadoNe(rs.getString("liberado_ne"));
			produto.setComplemento(rs.getString("complemento"));
			produto.setPrecoCusto(rs.getDouble("preco_custo"));
			produto.setPrecoVenda(rs.getDouble("preco_venda"));
			produto.setMargem(rs.getDouble("margem"));
			produto.setUnidade(rs.getString("margem"));
			produto.setDescontoMax(rs.getDouble("desconto_max"));
			produto.setIcms(rs.getDouble("icms"));
			produto.setIpi(rs.getDouble("ipi"));
			produto.setQtdEstoque(rs.getInt("qtd_estoque"));
			produto.setEstoqueMin(rs.getInt("estoque_min"));
			produto.setEstoqueMax(rs.getInt("estoque_max"));
			produto.setFornecedor(rs.getString("fornecedor"));
			produto.setIat(rs.getString("iat"));
			produto.setIppt(rs.getString("ippt"));
			produto.setSituacaoTributaria(rs.getString("sit_trib"));
		}

		rs.close();
		stmt.close();
		return produto;
	}

	public Produto findByCpf(String cpf) {
		try {
			String select = "SELECT * FROM PRODUTO WHERE cpf = ?";
			Produto produto = null;
			PreparedStatement stmt = getConnection().prepareStatement(select);

			stmt.setString(1, cpf);
			ResultSet rs = stmt.executeQuery();

			while (rs.next()) {
				produto = new Produto();
				produto.setId(rs.getInt("cod_produto"));
				produto.setDataCadastro(rs.getString("data_cadastro"));
				produto.setDataUltimaAlteracao(rs
						.getString("data_ultima_alteracao"));
				produto.setCod_barra(rs.getInt("cod_barra"));
				produto.setDescricao(rs.getString("descricao"));
				produto.setMarca(rs.getString("marca"));
				produto.setLocalEstoque(rs.getString("local_estoque"));
				produto.setAliquota(rs.getDouble("aliquota"));
				produto.setCodNcm(rs.getInt("cod_ncm"));
				produto.setAtivo(rs.getString("ativo"));
				produto.setCodLoja(rs.getInt("cod_loja"));
				produto.setLiberadoNe(rs.getString("liberado_ne"));
				produto.setComplemento(rs.getString("complemento"));
				produto.setPrecoCusto(rs.getDouble("preco_custo"));
				produto.setPrecoVenda(rs.getDouble("preco_venda"));
				produto.setMargem(rs.getDouble("margem"));
				produto.setUnidade(rs.getString("margem"));
				produto.setDescontoMax(rs.getDouble("desconto_max"));
				produto.setIcms(rs.getDouble("icms"));
				produto.setIpi(rs.getDouble("ipi"));
				produto.setQtdEstoque(rs.getInt("qtd_estoque"));
				produto.setEstoqueMin(rs.getInt("estoque_min"));
				produto.setEstoqueMax(rs.getInt("estoque_max"));
				produto.setFornecedor(rs.getString("fornecedor"));
				produto.setIat(rs.getString("iat"));
				produto.setIppt(rs.getString("ippt"));
				produto.setSituacaoTributaria(rs.getString("sit_trib"));
			}

			rs.close();
			stmt.close();
			return produto;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}
